From: Matthieu Gallien Date: Mon, 31 Mar 2025 11:03:58 +0000 (+0200) Subject: automated tests of bulk upload needs to check checksums like real X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2^2~38^2~4 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/www.github.com///%22http:/www.example.com/cgi/%22https:/www.github.com/?a=commitdiff_plain;h=84247296d8c8d37f691ed98e2bbd6e1f70830f35;p=nextcloud-desktop.git automated tests of bulk upload needs to check checksums like real Signed-off-by: Matthieu Gallien --- diff --git a/test/syncenginetestutils.cpp b/test/syncenginetestutils.cpp index 507fcd2ee..e956716a8 100644 --- a/test/syncenginetestutils.cpp +++ b/test/syncenginetestutils.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -555,8 +556,40 @@ QVector FakePutMultiFileReply::performMultiPart(FileInfo &remoteRoot } const auto fileName = allHeaders[QStringLiteral("x-file-path")]; const auto modtime = allHeaders[QByteArrayLiteral("x-file-mtime")].toLongLong(); + const auto expectedMd5Checksum = allHeaders[QStringLiteral("x-file-md5")]; + const auto standardChecksum = allHeaders[QStringLiteral("oc-checksum")]; Q_ASSERT(!fileName.isEmpty()); Q_ASSERT(modtime > 0); + Q_ASSERT(!expectedMd5Checksum.isEmpty()); + Q_ASSERT(!standardChecksum.isEmpty()); + + const auto standardChecksumComponents = standardChecksum.split(':'); + Q_ASSERT(standardChecksumComponents.size() == 2); + auto standardHashAlgorithm = QCryptographicHash::Algorithm::Sha1; + const auto standardHashAlgorithmString = standardChecksumComponents.at(0); + if (standardHashAlgorithmString == QStringLiteral("MD5")) { + standardHashAlgorithm = QCryptographicHash::Algorithm::Md5; + } else if (standardHashAlgorithmString == QStringLiteral("SHA1")) { + standardHashAlgorithm = QCryptographicHash::Algorithm::Sha1; + } else if (standardHashAlgorithmString == QStringLiteral("SHA256")) { + standardHashAlgorithm = QCryptographicHash::Algorithm::Sha256; + } else if (standardHashAlgorithmString == QStringLiteral("SHA3_256")) { + standardHashAlgorithm = QCryptographicHash::Algorithm::Sha3_256; + } else if (standardHashAlgorithmString == QStringLiteral("Adler32")) { + Q_ASSERT(false); + } + + QCryptographicHash md5SumAlgorithm{QCryptographicHash::Algorithm::Md5}; + QCryptographicHash standardSumAlgorithm{standardHashAlgorithm}; + + md5SumAlgorithm.addData(onePartBody.toLatin1()); + const auto computedMd5Checksum = md5SumAlgorithm.result().toHex(); + Q_ASSERT(expectedMd5Checksum == computedMd5Checksum); + + standardSumAlgorithm.addData(onePartBody.toLatin1()); + const auto computedStandardChecksum = standardSumAlgorithm.result().toHex(); + Q_ASSERT(standardChecksumComponents.at(1) == computedStandardChecksum); + FileInfo *fileInfo = remoteRootFileInfo.find(fileName); if (fileInfo) { fileInfo->size = onePartBody.size();